查看原文
其他

做机器学习是一种怎样的体验?详解机器学习专家的日常工作

Rachel Thomas 论智 2018-08-06
来源:fast.ai编译:Bing

编者按:本文作者是fast.ai的创始人之一Rachel Thomas,它是一名深度学习研究员,主要工作内容是将机器学习技术更容易被其他领域的人员使用。本文介绍了机器学习从业人员的主要工作内容,论智将其编译如下。

当下,媒体总会用“稀缺”、“高薪”等字眼来描绘机器学习,甚至还有一些夸张的标题宣称某公司的自动机器学习产品能代替机器学习专家。在TensorFlow DevSummit上,谷歌AI的首席科学家Jeff Dean表示,目前数千万家公司会产出电子数据,但是缺少会机器学习技术的人才。而我在fast.ai的工作正是让更多的人学会机器学习技术、让这种技能变得更易掌握,所以我对这一问题进行了而深入研究。

在思考我们如何让机器学习自动化,以及如何让它普及到更多领域的人时,首先要思考的是,机器学习专家们都要做什么?任何能解决机器学习专家紧缺的方法都要回答这样一个问题:我们是否知道该教授什么知识、用什么工具、或者在哪一部分实现自动化。

这篇文章属于连载系列的第一篇,这里我们会描述机器学习专家实际上都做些什么。该系列的第二篇文章会解释什么是自动化机器学习以及什么是神经架构搜索(一些重量级人物曾表明这两种成果是减少对数据科学家需要的关键),最后第三部分将介绍谷歌的自动机器学习产品。

在复杂工作中建立数据产品

很多学术界的机器学习成果都只关注预测模型,但这只是机器学习专业人员平时工作的一部分。明确工作问题、收集并清洗数据、搭建模型、得出结果并监测变化,这些过程通常会以不同形式相互连接,很难单独拿出来作为研究对象。正如Jeremy Howard等人在Designing great data products中所写的那样:“强大的预测模型是解决方案的一个重要部分,但是它并不独立存在;随着产品变得越来越复杂,它也知识系统中的一部分。”

谷歌的一个小组写过一篇名为Machine Learning: The High-Interest Credit Card of Technical Debt的文章,讲的是在实际案例中使用机器学习技术时,总会产生复杂的代码和“技术债”。作者提出了几种系统层面的交互、风险和反模式:

  • 粘合代码(glue code):即将数据加入通用包或从中取出的大量代码

  • 通道森林(pipeline jungles):用机器学习的形式准备数据的系统可能含有多种难题、连接点和采样步骤,通常在中间文件的输出处

  • 重新使用输入信号,如果系统分离可以创造紧耦合装置

  • 可能改变外部环境的风险也许会改变模型或输入信号的行为,这种情况很难控制

作者写道:“真实世界中,机器学习着重关注的就是这类问题的解决……值得注意的是,粘合代码和通道森林是集成问题的典型症状,原因可能是因为将“研究”和“工程”的角色过度分离了……如果学术界知道了在机器学习系统中只有一小部分代码在起作用,他们一定会惊讶的。”

当机器学习项目失败时

机器学习项目失败的情况有以下这么几种:

  • 当数据科学团队搭建了一个从未用过的工具。但是公司的其他部门并不知道他们做了什么,有些数据科学家也并不清除这些成果能否用于实际生产中。

  • 当数据科学家们创造模型的速度快于将其投入生产的速度,就会产生积压。

  • 数据基础架构工程师和数据科学家是分开的。通道中没有数据时,数据科学家会要求数据基础架构工程师获取。

  • 当公司最终确定产品X的功能后,他们需要数据科学家收集支持这项决策的数据。数据科学家认为产品经理会忽略那些与决定相反的数据,而产品经理会认为数据科学家忽略商业逻辑。

  • 数据科学团队面试了一位数学建模、工程技术能力都很好的候选人。确定录用后加入到垂直应用产品团队,并需要简单的商业分析。数据科学家感到很无聊,所学技能根本用不上。

这些问题是我之前在写公司组织失败时列出的,但是它们同样可以看作是太过于关注复杂系统的单一方面。问题在于数据产品之间缺少沟通并且没有目标。

所以,机器学习专家都怎么做?

如上建议,打造一款机器学习产品是多方面的复杂任务。下面是机器学习专家在工作中需要做的事:

理解语境

  • 找准能从机器学习中受益的区域

  • 与其他相关人员讨论机器学习能做什么、不能做什么

  • 让每个人都了解商业策略、风险和目标

  • 明确目前公司有什么类型的数据

  • 对任务制定合适的框架

  • 了解操作限制

  • 提前确定可能的道德风险,例如你的成果有可能被滥用、或被用于宣传

  • 确定潜在的偏见和潜在的负面反馈

数据

  • 制作能收集更多不同数据的计划

  • 将不同来源的数据汇总

  • 处理缺失的或被污染的数据

  • 数据可视化

  • 建立合适的训练集、验证集和测试集

建模

  • 选择使用哪个模型

  • 将资源模型纳入约束条件(即最终模型需要在顶尖设备商运行,内存少、延长时间长等等)

  • 选择超参数(包括架构、损失函数、优化器)

  • 训练模型,并进行debug。其中包括调参、查看损失函数、训练错误、验证错误是否有改变、监测模型数据、确定错误来源、改变数据清洗和处理的方式、改变数据增强方式、添加更多数据、尝试不同模型、是否过度拟合。

模型生成

  • 创建一个API或网页app

  • 将模型输出成想要的格式

  • 计划模型多久需要重新训练一次并更新数据

监测

  • 追踪模型性能

  • 监测输入数据,确定数据是否会随时间使得模型失效

  • 与其他人员交流结果

  • 制定计划,如何监测和应对意外结果

确切地讲,并不是每个机器学习人员都会做到上面所有工作,但是这一整个流程是很多机器学习应用所必备的。即使你从事的只是其中的一小部分,了解其他流程也有助于你的工作。

机器学习的两大难点

对我自己和其他我认识的人来说,机器学习有两种最耗时费力的步骤:

  • 处理数据格式、不兼容和报错

  • 训练特别脆弱的深度学习模型

数据清理真的是机器学习的一部分吗?是的

处理数据的不一致和报错经常是混乱费力的过程。人们有时会将机器学习和数据科学分开,因为对机器学习来说,有时会直接用清洗过的数据进行训练。然而在我的经验中,数据集清洗和训练模型是相关的:我经常会在训练模型的时候发现问题,只能改变输入数据的预处理方法。

训练深度学习模型很脆弱

很多新手在一开始训练模型时会很容易受挫,即使是专家也经常感到沮丧。在NIPS 2017上,Ali Rahimi就曾抱怨深度学习的脆弱性

这一现象也表明训练过程并未自动化,如果有某些能稳定训练深度学习的方法出现,对该领域来说一定是个巨大的进步。此前的dropout、迁移学习等方法都让训练变得容易了些,但总体来说稳定的训练仍然是个需要解决的问题。

给学术研究者

即使你正在研究机器学习的理论,了解从业者的工作内容也是必须的,这可以和研究目标结合起来。正如谷歌工程师D. Sculley等人所说:“技术债是工程师和学者都必须意识到的问题。如果研究出的解决方法只对精确度有微小的提升,却让系统复杂性大大增加,那么这一定不是一个明智方案……解决技术债也许不总是诞生新的理论,但却是创新的重要一环。而发展针对复杂机器学习系统的全面、优雅的解决方案才是真正有意义的工作。”

AutoML

现在我们大致了解了机器学习从业者的入场工作,那么将这一流程自动化会怎样呢?AutoML正是致力于自动化机器学习领域,其中它的子集神经网络搜索目前势头正猛。在明天的文章中,我们将解释什么是AutoML和神经网络搜索。

原文地址:www.fast.ai/2018/07/12/auto-ml-1/

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存